package structureDeDonnee;


/**
 * classe représentant une cellule
 */
public class Cell implements Comparable<Cell> {


	/**
	 * position de la cellule
	 */
	private Position position;

	/**
	 * Va nous permettre de gérer le calcul de etapeSuivante() efficacement
	 */
	private int poids;

	/**
	 * default constructor
	 */
	public Cell() {
	}


	/**
	 * constructeur
	 * @param position de la cellule
	 */
	public Cell(Position position) {
		this.position = position;
		this.poids = 1;
	}

	/**
	 * constructeur
	 * @param c cellule qu'on va copier
	 */
	public Cell(Cell c) {
		this.position = new Position(c.position);
		this.poids = c.getPoids();
	}

	/**
	 * constructeur
	 * @param x position horizontale de la cellule
	 * @param y positon verticale de la cellule
	 */
	public Cell(int x, int y) {
		position = new Position(x, y);
		this.poids = 1;
	}

	/**
	 * constructeur 
	 * @param poids poids poids de la cellule
	 * @param x position horizontale de la cellule
	 * @param y positon verticale de la cellule
	 */
	public Cell(int poids, int x, int y) {
		position = new Position(x, y);
		this.poids = poids;
	}

	/**
	 * constructeur 
	 * @param poids poids poids de la cellule
	 * @param position position de la cellule
	 */
	public Cell(int poids, Position position) {
		this.position = position;
		this.poids = poids;
	}

	/**
	 * ======= equals method to compare if a Cell c is the same as this cell.
	 */
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Cell other = (Cell) obj;
		return this.position.equals(other.getPosition());
	}

	/**
	 * getter of the Position attribute
	 * 
	 * @return
	 */
	public Position getPosition() {
		return position;
	}

	public int getPoids() {
		return poids;
	}
	@Override
	public String toString() {
		return "Cell [position=" + position + "poids = " + poids + "]" + "\n";
	}

	@Override
	public int compareTo(Cell o) {
		return this.position.compareTo(o.position);
	}
}
